<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>对象类型</title>
    <script>
        function f1(){
            // JavaScript内置的对象
            // 该对象是一个万能对象
            // 没有固定其属性,我们可以自定义该对象的属性
            // 当用户赋值了该对象某一个属性时,其将会存在该属性
            // 属性必须先赋值才能取值
            let obj = new Object();
            // 赋值
            obj.id = 1;
            obj.name = "张三";
            obj.play = function(){
                console.log(this.name+"正在打王者荣耀");
            };

            // 取值
            console.log(obj.id);
            console.log(obj.name);
            // 调用方法
            obj.play();
            console.log(typeof obj);
        }
        function f2(){
            // 自定义对象
            // 可以通过函数去自定义一个对象
            let user = new User(1,"admin","123456");
            console.log(user.username);
            console.log(typeof user);
        }

        // 该函数相当于Java的构造函数
        function User(id,username,password){
            this.id = id;
            this.username = username;
            this.password = password;
        }
        function f3(){
            // 使用JSON语法进行定义
            // JSON本质上也是一个对象
            let user = {"id":1,"username":"admin","password":"123456","play":function(){console.log(this.username+"正在玩")}};
            console.log(user.id+"-"+user.username+"-"+user.password);
            user.play();
            console.log(typeof user);
        }
        function f4(){
            // 使用JSON格式的字符串进行定义
            // 在js里面,可以通过单引号与双引号定义一个字符串
            // 由于JSON语法中存在引号
            // 因此,如果JSON中是双引号,整个字符串只能是单引号
            // 如果JSON中是单引号,整个字符串只能是双引号
            let user = "{'id':1,'username':'admin','password':'123456'}";
            let user2 = '{"id":2,"username":"alice","password":"987654"}';
            console.log(typeof user);
            console.log(typeof user2);
            // 此时user与user2均为字符串类型
            // 我们需要将JSON格式的字符串转换成JSON对象
            // 有两种方式进行转换
            // 方式一:使用eval()方法进行转换
                // 该方法属于通用方法
                // 转换时需要将需要转换的字符串使用括号括起来
            let user3 = eval("("+user+")");
            let user4 = eval("("+user2+")");

            console.log(typeof user3);
            console.log(typeof user4);

            // 方式二:使用JSON.parse()进行转换
                // 该方法对于需要转换的JSON字符串存在要求
                // 只能转换单引号格式的字符串
                // 安全性较高
            // 如果对双引号格式的字符串进行转换,会报错
            // let user5 = JSON.parse(user);
            // console.log(typeof user5);
            let user6 = JSON.parse(user2);
            console.log(typeof user6);
        }
    </script>
</head>
<body>
<button onclick="f1()">对象定义方式一</button><br/>
<button onclick="f2()">对象定义方式二</button><br/>
<button onclick="f3()">对象定义方式三</button><br/>
<button onclick="f4()">对象定义方式四</button><br/>
</body>
</html>